package com.ruoyi.shop.util.pay;

import com.ruoyi.common.utils.StringUtils;

import java.util.HashMap;
import java.util.Map;

/**
 *  小程序调起支付API 参数
 * @Author Alan Zhang
 * @Date 2021/9/25 15:39
 */
public class WxMiniProgramUtil {

    /**
     * 小程序调起支付参数
     * @param prepayId
     * @param appId
     * @return
     * @throws Exception
     */
    public static Map<String, String> paymentParams(String prepayId, String appId, String key) throws Exception{
        if(StringUtils.isEmpty(prepayId)){
            throw new Exception("prepay_id is null");
        }
        if(StringUtils.isEmpty(appId) || StringUtils.isEmpty(key)){
            throw new Exception("appId or key is null");
        }
        HashMap<String, String> paramsMap = null;
        try {
            paramsMap = new HashMap<>();
            //商户申请的小程序对应的appid，由微信支付生成，可在小程序后台查看
            paramsMap.put("appId", appId);
            paramsMap.put("timeStamp", WxPayUtils.getCurrentTimestamp() + "");
            paramsMap.put("nonceStr", WxPayUtils.generateNonceStr());
            //小程序下单接口返回的prepay_id参数值，提交格式如：prepay_id=***
            // 示例值：prepay_id=wx201410272009395522657a690389285100
            paramsMap.put("package", "prepay_id=" + prepayId);
            //注意此处需与统一下单的签名类型一致
            paramsMap.put("signType", WXPayConstants .HMACSHA256);

            //签名，使用字段appId、timeStamp、nonceStr、package计算得出的签名值
            String paySign = WxPayUtils.generateSignature(paramsMap, key, WXPayConstants.SignType.HMACSHA256);
            paramsMap.put("paySign",paySign);
            paramsMap.remove("appId");
        }catch (Exception e){
            e.printStackTrace();
        }
        return paramsMap;
    }
}
